package com.wx.datastructure.array;

/**
 * @author wx
 * @Description: 线性结构-数组接口
 * @date 2018/12/7 000716:46
 */
public interface IArray<E> {
    /**
     * @param
     * @description: 数组的容量
     * @author: wx
     * @date: 2018/12/7 0007
     * @return: int
     */
    int capacity();

    /**
     * @param
     * @description: 数组中的元素数量
     * @author: wx
     * @date: 2018/12/7 0007
     * @return: int
     */
    int size();

    /**
     * @param
     * @description: 数组是否为空数组
     * @author: wx
     * @date: 2018/12/7 0007
     * @return: boolean
     */
    boolean isEmpty();
    

    /**
     * @description: 数组尾部添加数据
     * @author: wx
     * @date: 2018/12/7 0007
     * @param e 元素
     * @return: void
     */
    void addLast(E e);

   /**
    * @description: 数组头部添加数据
    * @author: wx
    * @date: 2018/12/7 0007
    * @param e 元素
    * @return: void
    */
    void addFirst(E e);

   /**
    * @description: 指定下标添加数据
    * @author: wx
    * @date: 2018/12/7 0007
    * @param index 下标
    * @param e    元素
    * @return: void
    */
    void add(int index, E e);
    
    /**
     * @description: 查看最后一个元素
     * @author: wx
     * @date: 2018/12/10 0010
     * @param
     * @return: E
     */
    E getLast();
    
    /**
     * @description: 根据下标获取元素
     * @author: wx
     * @date: 2018/12/7 0007
     * @param index 下标
     * @return: E
     */
    E get(int index);


    /**
     * @description: 根据下标修改元素内容
     * @author: wx
     * @date: 2018/12/7 0007
     * @param index 下标
     * @param e     数据
     * @return: void
     */
    void set(int index, E e);
    
    /**
     * @description: 查找数组中是否有元素
     * @author: wx
     * @date: 2018/12/7 0007
     * @param e  元素
     * @return: boolean
     */
    boolean contains(E e);

    /**
     * @description: 查找元素对应的下标
     * @author: wx
     * @date: 2018/12/7 0007
     * @param e  元素
     * @return: boolean
     */
    int find(E e);
    
    /**
     * @description: 根据下标删除元素，并返回删除内容
     * @author: wx
     * @date: 2018/12/7 0007
     * @param index
     * @return: E
     */
    E remove(int index);
    
    /**
     * @description: 删除第一个元素,并返回删除内容
     * @author: wx
     * @date: 2018/12/7 0007
     * @param 
     * @return: E
     */
    E removeFirst();
    
    /**
     * @description: 删除最后一个元素,并返回删除内容
     * @author: wx
     * @date: 2018/12/7 0007
     * @param 
     * @return: E
     */
    E removeLast();
    
    /**
     * @description: 根据元素内容删除元素
     * @author: wx
     * @date: 2018/12/7 0007
     * @param e
     * @return: void
     */
    void removeElement(E e);
    
    /**
     * @description: 数组扩容
     * @author: wx
     * @date: 2018/12/10 0010
     * @param newCapacity
     * @return: void
     */
    void resize(int newCapacity);
}
